home *** CD-ROM | disk | FTP | other *** search
/ Motor Sport Digital Archive Collection 1960s / Motor Sport Digital Archive Collection 1960s.iso / main.swf / scripts / mx / binding / RepeaterItemWatcher.as < prev    next >
Encoding:
Text File  |  2008-05-21  |  2.8 KB  |  99 lines

  1. package mx.binding
  2. {
  3.    import mx.collections.CursorBookmark;
  4.    import mx.collections.ICollectionView;
  5.    import mx.collections.IViewCursor;
  6.    import mx.core.mx_internal;
  7.    import mx.events.CollectionEvent;
  8.    
  9.    use namespace mx_internal;
  10.    
  11.    public class RepeaterItemWatcher extends Watcher
  12.    {
  13.       mx_internal static const VERSION:String = "2.0.1.0";
  14.       
  15.       private var dataProviderWatcher:PropertyWatcher;
  16.       
  17.       private var original:Boolean = true;
  18.       
  19.       private var clones:Array;
  20.       
  21.       public function RepeaterItemWatcher(param1:PropertyWatcher)
  22.       {
  23.          original = true;
  24.          super();
  25.          this.dataProviderWatcher = param1;
  26.       }
  27.       
  28.       private function changedHandler(param1:CollectionEvent) : void
  29.       {
  30.          var _loc2_:ICollectionView = null;
  31.          _loc2_ = ICollectionView(dataProviderWatcher.value);
  32.          if(_loc2_)
  33.          {
  34.             updateClones(_loc2_);
  35.          }
  36.       }
  37.       
  38.       override public function updateParent(param1:Object) : void
  39.       {
  40.          var dataProvider:ICollectionView = null;
  41.          var parent:Object = param1;
  42.          dataProviderWatcher = PropertyWatcher(parent);
  43.          dataProvider = ICollectionView(dataProviderWatcher.value);
  44.          if(dataProvider)
  45.          {
  46.             if(original)
  47.             {
  48.                dataProvider.addEventListener(CollectionEvent.COLLECTION_CHANGE,changedHandler,false,0,true);
  49.                updateClones(dataProvider);
  50.             }
  51.             else
  52.             {
  53.                wrapUpdate(function():void
  54.                {
  55.                   var _loc1_:IViewCursor = null;
  56.                   _loc1_ = dataProvider.createCursor();
  57.                   _loc1_.seek(CursorBookmark.FIRST,cloneIndex);
  58.                   value = _loc1_.current;
  59.                   updateChildren();
  60.                });
  61.             }
  62.          }
  63.       }
  64.       
  65.       private function updateClones(param1:ICollectionView) : void
  66.       {
  67.          var _loc2_:int = 0;
  68.          var _loc3_:RepeaterItemWatcher = null;
  69.          if(clones)
  70.          {
  71.             clones = clones.splice(0,param1.length);
  72.          }
  73.          else
  74.          {
  75.             clones = [];
  76.          }
  77.          _loc2_ = 0;
  78.          while(_loc2_ < param1.length)
  79.          {
  80.             _loc3_ = RepeaterItemWatcher(clones[_loc2_]);
  81.             if(!_loc3_)
  82.             {
  83.                _loc3_ = RepeaterItemWatcher(deepClone(_loc2_));
  84.                _loc3_.original = false;
  85.                clones[_loc2_] = _loc3_;
  86.             }
  87.             _loc3_.updateParent(dataProviderWatcher);
  88.             _loc2_++;
  89.          }
  90.       }
  91.       
  92.       override protected function shallowClone() : Watcher
  93.       {
  94.          return new RepeaterItemWatcher(dataProviderWatcher);
  95.       }
  96.    }
  97. }
  98.  
  99.